26#define MRB_EXC_EXIT 65536
27#define MRB_EXC_EXIT_P(e) ((e)->flags & MRB_EXC_EXIT)
29#define MRB_EXC_EXIT_STATUS(mrb,e) ((int)mrb_as_int((mrb),mrb_obj_iv_get((mrb),(e),MRB_SYM(status))))
31#define MRB_EXC_CHECK_EXIT(mrb,e) do {if (MRB_EXC_EXIT_P(e)) exit(MRB_EXC_EXIT_STATUS((mrb),(e)));} while (0)
33#define mrb_exc_ptr(v) ((struct RException*)mrb_ptr(v))
37#define mrb_exc_new_lit(mrb, c, lit) mrb_exc_new_str(mrb, c, mrb_str_new_lit(mrb, lit))
47#if defined(MRB_64BIT) || defined(MRB_WORD_BOXING)
48#undef MRB_USE_RBREAK_VALUE_UNION
50#define MRB_USE_RBREAK_VALUE_UNION 1
61 uintptr_t ci_break_index;
62#ifndef MRB_USE_RBREAK_VALUE_UNION
64#elif defined(MRB_NAN_BOXING)
66 uint32_t value[
sizeof(
mrb_value) /
sizeof(uint32_t)];
73#ifndef MRB_USE_RBREAK_VALUE_UNION
74#define mrb_break_value_get(brk) ((brk)->val)
75#define mrb_break_value_set(brk, v) ((brk)->val = v)
76#elif defined(MRB_NAN_BOXING)
78mrb_break_value_get(
struct RBreak *brk)
81 memcpy(&val, brk->value,
sizeof(val));
87 memcpy(brk->value, &val,
sizeof(val));
90#define RBREAK_VALUE_TT_MASK ((1 << 8) - 1)
92mrb_break_value_get(
struct RBreak *brk)
95 memcpy(&val.value, brk->value,
sizeof(val.value));
96 val.tt = (
enum mrb_vtype)(brk->flags & RBREAK_VALUE_TT_MASK);
102 memcpy(brk->value, &val.value,
sizeof(val.value));
103 brk->flags &= ~RBREAK_VALUE_TT_MASK;
104 brk->flags |= val.tt;
154 mrb_int len,
struct RClass **classes);
183#define MRB_ENSURE(mrb, result_var, func, data) \
184 for (mrb_bool MRB_UNIQNAME(_break_) = FALSE; \
185 !MRB_UNIQNAME(_break_) && \
186 (((result_var) = mrb_protect_error(mrb, func, data, &MRB_UNIQNAME(_break_))), \
187 ((mrb)->exc = (MRB_UNIQNAME(_break_) ? mrb_obj_ptr((result_var)) : NULL)), \
189 (void)(MRB_UNIQNAME(_break_) && (mrb)->jmp && (mrb_exc_raise(mrb, result_var), TRUE)), \
190 MRB_UNIQNAME(_break_) = TRUE)
mruby common platform definition"
#define MRB_END_DECL
End declarations in C mode.
Definition common.h:28
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition common.h:26
#define MRB_API
Declare a public mruby API function.
Definition common.h:108
#define mrb_noreturn
Shared compiler macros.
Definition common.h:50
void mrb_clear_error(mrb_state *mrb)
Error check.
Definition error.c:879
mrb_value mrb_protect(mrb_state *mrb, mrb_func_t body, mrb_value data, mrb_bool *state)
Protect (takes mrb_value for body argument)
mrb_value mrb_protect_error_func(mrb_state *mrb, void *userdata)
Protect.
Definition error.h:121
mrb_value mrb_protect_error(mrb_state *mrb, mrb_protect_error_func *body, void *userdata, mrb_bool *error)
Protects a C function call from mruby exceptions.
Definition vm.c:540
mrb_value mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data, mrb_int len, struct RClass **classes)
Rescue exception.
mrb_value mrb_rescue(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data)
Rescue.
mrb_value mrb_ensure(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t ensure, mrb_value e_data)
Ensure.
mrb_value(* mrb_func_t)(mrb_state *mrb, mrb_value self)
Function pointer type for a function callable by mruby.
Definition mruby.h:227
Class class.
Definition class.h:17
mruby error handling.
Definition error.h:18
Definition boxing_nan.h:40
Definition boxing_no.h:15